import axios from "axios";
import { notification } from "antd";
import { nowApiAddressObj } from "./nowApiAddressObj";
import YaoTokenUtil from "../utils/tokenTool";
import YaoBasicsUtil from "../utils/basicsTool";
//跨域的话必须设置
// axios.defaults.withCredentials = true;

// get使用params
// post使用data

let headers = {
  // "Content-Type": "multipart/form-data",
  "Content-Type": "application/json",
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Credentials": true,
  "Access-Control-Allow-Headers": "X-PINGOTHER, Content-Type",
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
};
const requests = axios.create({
  baseURL: nowApiAddressObj, // 设置根路径 http://localhost:3000
  timeout: 5000,
  //这告诉服务器请求正文将发送为JSON格式。
  headers: headers,
  // 在跨域请求时，允许携带敏感信息，如cookie、HTTP认证信息等
  xhrFields: {
    withCredentials: true, //跨域的话必须设置
  },
  // 其他配置项...
});
// 添加请求拦截器
requests.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    console.log("yaojunhao 请求拦截器_config", config);
    return {
      ...config,
      headers: {
        ...config.headers,
        Authorization: YaoTokenUtil.getToken() || "",
      },
    };
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

/**
 * token令牌错误 如果code返回的1404
 *
 * @param { Number } code 状态码
 * @author yaojunhao
 **/

function tokenError(code) {
  if (code === 1404) {
    // 清除token
    YaoTokenUtil.clearToken();
    // 跳转登录页面
    window.location.href = "/login";
    sessionStorage.setItem("userInfoLoseEfficacy", JSON.stringify(true));
  }
}

// 添加响应拦截器
requests.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    // console.log('响应拦截器一次');
    console.log("yaojunhao 添加响应拦截器_response", response);
    // 如果是登录接口，保存token
    if (response.config.url == "/scream/api/login") {
      // 登录接口 保存token
      let responseToken = response.headers["authorization"];
      if (responseToken) {
        console.log("yaojunhao 添加响应拦截器_responseToken", responseToken);
        YaoTokenUtil.setToken(responseToken);
        // 解码token保存用户信息
        let jwtDecode = YaoBasicsUtil.jwtDecode(responseToken);
        console.log("yaojunhao 添加响应拦截器_jwtDecode", jwtDecode);
        // 保存解码后数据
        localStorage.setItem("userTokenInfo", JSON.stringify(jwtDecode));
      }
    }
    // 判断token是否失效
    tokenError(response.data.code);
    // 如果网址是获取用户信息 返回数据用jsonBigParse，防止数据错误
    if (response.config.url == "/scream/api/users/getLoginUserInfo") {
      let responseData = YaoBasicsUtil.jsonBigParse(response.request.response);
      return responseData;
    }
    return response.data;
  },
  (error) => {
    // 对响应错误做点什么
    console.log("yaojunhao 添加响应拦截器_error", error);
    try {
      if (error.response.data.code && error.response.data.code == "1404") {
        // 判断token是否失效
        tokenError(error.response.data.code);
        return Promise.reject(error);
      }
    } catch (error) {
      console.log("yaojunhao ", error);
    }

    // 服务器正在维护，请稍后再试
    // notification.error({
    //   message: "服务器正在维护，请稍后再试",
    // });
    return Promise.reject(error);
  }
);

export default requests;
